﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTVeterinariaServices.Dominio;
using System.Data.SqlClient;
using System.ServiceModel;

namespace RESTVeterinariaServices.Persistencia
{
    public class ProductoDAO
    {

        public Producto Crear(Producto objACrear)
        {
            Producto ObjCreado = null;
            try
            {
                int Pk = 0;
                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    string query = "SELECT isnull(MAX(IdProducto)+1,1) FROM Producto";
                    using (SqlCommand sentencia = new SqlCommand(query, con))
                    {
                        Pk = (int)sentencia.ExecuteScalar();
                    }
                }

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    string query = "INSERT INTO Producto VALUES(@IdProducto,@txtProducto)";
                    objACrear.IdProducto = Pk;
                    using (SqlCommand com = new SqlCommand(query, con))
                    {
                        com.Parameters.Add(new SqlParameter("@idProducto", objACrear.IdProducto));
                        com.Parameters.Add(new SqlParameter("@txtProducto", objACrear.txtProducto));
                        com.ExecuteNonQuery();
                    }
                }
                ObjCreado = obtener(objACrear.IdProducto.ToString());
                return ObjCreado;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Producto obtener(string strPk)
        {
            try
            {
                Producto P = null;
                string sql = "SELECT IdProducto,txtProducto FROM Producto where IdProducto=@IdProducto";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.Add(new SqlParameter("@IdProducto", strPk));
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            if (res.Read())
                            {
                                P = new Producto()
                                {
                                    IdProducto = (int)res["idProducto"],
                                    txtProducto = (string)res["txtProducto"]
                                };
                            }
                        }
                    }
                }
                return P;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Producto> ListarTodos()
        {
            try
            {
                List<Producto> list = new List<Producto>();
                string sql = "SELECT IdProducto,txtProducto FROM Producto";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            while (res.Read())
                            {
                                Producto c = new Producto()
                                {
                                    IdProducto = (int)res["idProducto"],
                                    txtProducto = (string)res["txtProducto"]
                                };
                                list.Add(c);
                            }
                        }
                    }
                }
                return list;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Producto Modificar(Producto objAModificar)
        {
            Producto objModificado = null;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                string sql = "UPDATE Producto ";
                sql += "SET txtProducto = @txtProducto ";
                sql += "WHERE IdProducto = @IdProducto";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@IdProducto", objAModificar.IdProducto));
                    com.Parameters.Add(new SqlParameter("@txtProducto", objAModificar.txtProducto));
                    com.ExecuteNonQuery();
                }
            }
            objModificado = obtener(objAModificar.IdProducto.ToString());
            return objModificado;
        }

    }
}